/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controller;

import java.util.List;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import modelo.Devolucion;
import modelo.Usoretiro;

/**
 *
 * @author Toshiba
 */
public interface UsoretiroControllerInterface {

    public void setUsoretiro(Usoretiro usoretiro);
    
    /**
     * Función para crear y preparar el atributo usoretiro
     * @return String
     */
    String crearSetup();

    /**
     * Función que Almacena (crea) la Operación de Uso/Retiro Representada.
     * (Guardar Usoretiro).
     * @return String
     */
    String create();

    /**
     * Función que preparar los atributos para el jsp de detalles del Usoretiro
     * @return String
     */
    String detailSetup();

    /**
     * Obtiene un Usoretiro con el id correspondiente.
     * @param id
     * @return Usoretiro
     */
    Usoretiro findUsoretiro(Integer id);

    /**
     * Función para Transformar el Usoretiro representado a una forma que pueda
     * ser transmitida en los jsps.
     * @return Map<Object, String>
     */
    Map<Object, String> getAsString();

    /**
     * Getter de la Devolución Relacionada al Usoretiro.
     * @return Devolucion[]
     */
    Devolucion[] getDevolucionCollectionOfUsoretiro();

    /**
     * Getter de Entity Manager
     * @return
     */
    EntityManager getEntityManager();

    /**
     * Getter del IdOperador
     * @return String
     */
    String getIdOperador();

    /**
     * Función para obtener la Cantidad de UsoRetiros en la base de datos
     * @return int
     */
    int getItemCount();

    /**
     * Getter del Usoretiro representado
     * @return Usoretiro
     */
    Usoretiro getUsoretiro();

    /**
     * Getter de todos los Usoretiros de la Base de Datos (Wrapper)
     * @return List<Usoretiro>
     */
    List<Usoretiro> getUsoretiros();

    /**
     * Getter de todos los Usoretiros directamente de la Base de Datos
     * @param all
     * @return
     */
    List<Usoretiro> getUsoretiros(boolean all);

    /**
     * Getter del UsoRetiros Disponibles en la base de datos
     * @return SelectItem[]
     */
    SelectItem[] getUsoretirosAvailableSelectMany();

    /**
     * Getter del UsoRetiros Disponibles en la base de datos con un
     * elemento vacio al principio del vector respuesta.
     * @return SelectItem[]
     */
    SelectItem[] getUsoretirosAvailableSelectOne();

    /**
     * Función para asignar el atributo usoretiros y se pueda
     * utilizar en la lista de Uso/Retiro.
     * @return String
     */
    String listSetup();

    /**
     * Función para resetear ciertos atributos (usoretiro, usoretiros,
     * itemCount) de la clase.
     * @param resetFirstItem
     */
    void reset(boolean resetFirstItem);

    /**
     * Setter de la Devolución Relacionada al Usoretiro.
     * @param devolucionCollection
     */
    void setDevolucionCollectionOfUsoretiro(Devolucion[] devolucionCollection);

    /**
     * Función que Vincula y Valida JSP con el Uso/Retiro Representado.
     * @param facesContext
     * @param component
     * @param value
     */
    void validateCreate(FacesContext facesContext, UIComponent component, Object value);

}
